#!usr/bin/env python  
# -*- coding:utf-8 -*-
""" 
@author:robot
@file: titile17.py 
@version:
@time: 2023/05/14 
给出一个仅包含字符'(',')','{','}','['和']',的字符串，判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭，"()"和"()[]{}"都是合法的括号序列，但"(]"和"([)]"不合法。

思路：
step 1：创建辅助栈，遍历字符串。
step 2：每次遇到小括号的左括号、中括号的左括号、大括号的左括号，就将其对应的呦括号加入栈中，期待在后续遇到。
step 3：*如果没有遇到左括号但是栈为空，说明直接遇到了右括号，不合法。——> 给出一个仅包含字符'(',')','{','}','['和']',的字符串
step 4：其他情况下，如果遇到右括号，刚好会与栈顶元素相同，弹出栈顶元素继续遍历。
step 5：理论上，只要括号是匹配的，栈中元素最后是为空的，因此检查栈是否为空即可最后判断是否合法。
"""


class Solution:
    def isValid(self, s: str) -> bool:
        # write code here
        # 辅助栈
        st = []
        # 遍历字符串
        for char in s:
            if char == '(':
                st.append(')')
            elif char == '[':
                st.append(']')
            elif char == '{':
                st.append('}')
            elif len(st) == 0:
                return False
            elif st[-1] == char:
                st.pop()
        return len(st) == 0
